package course.d1218;
import java.util.*;

/*
Set接口: 无序不可重复
无序：没有下标，集合中存放的元素顺序没有保住，不能存放重复元素
实现类：Hashset类    LinkedHashSet类    TreeSet类
HashSet类：无序不可重复
LinkedHashSet extends HashSet : 不可重复 ， 集合顺序按照你添加的顺序
TreeSet： 按照自然排序对集合中的元素进行排序（Comparable）

set接口中常用的方法：
使用Set接口的集合（集合添加的元素必须重写 hashcode方法和 equals方法）
//遍历Set集合方式：
1.使用迭代器  2.增强 for循环
  遍历List集合：
1.使用迭代器  2.增强 for循环   3.普通 for循环

LinkedHashSet extends HashSet :  不可重复 ，集合顺序按照你添加的顺序

TreeSet :集合中的元素按照自然排序（Comparable）
构造方法：
public TreeSet<>;
public TreeSet<>(Comparator<? super E> com)
 */
public class p5 {
    public static void main(String[] args) {
        Set<String>  set = new TreeSet<>();
        set.add("d");
        set.add("1");
        set.add("5");
        set.add("3");
        System.out.println(set);
        Set<Integer> set1 = new LinkedHashSet<>();
        set1.add(1);
        set1.add(2);
        set1.add(32);
        set1.add(434);
        set1.add(-1);
        System.out.println(set1);

        Set<Person>  setting = new TreeSet<>((person, t1) -> person.getName().compareTo(t1.getName()));
        setting.add(new Person(12,"ttt"));
        setting.add(new Person(1,"qqq"));
        setting.add(new Person(13,"www"));
        setting.add(new Person(898,"tee"));
        System.out.println(setting);

    }
}
class Person implements  Comparable<Person>{

    private Integer age;
    private String name;

    @Override
    public int compareTo(Person person) {
        return this.age.compareTo(person.age);
    }

    public Person(Integer age, String name) {
        this.age = age;
        this.name = name;
    }

    public Person() {
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {

        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return Objects.equals(age, person.age) &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
